package com.chen.function_demo.chapter3;

import java.util.stream.Stream;

/**
 * 第三章第六节
 * @author 陈哲<p>
 * ================================<p>
 * Date: 2025/5/12<p>
 * Time: 11:45<p>
 * ================================
 */
public class Section6 {
    /*
        1、三种基本流：
       （1）IntStream: IntStream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
       （2）DoubleStream：DoubleStream.of(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0);
       （3）LongStream：LongStream.of(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L);
        基本流的性能相比于包装类的流高、占用空间少，适合处理大量数据。另外还有一些特有的方法
        IntStream举例：
        intStream.sum(); 求和
        intStream.average(); 求平均值
        intStream.max(); 求最大值
        intStream.min(); 求最小值
        intStream.mapToObj(); 转换为对象流
        。。。等等
        对象流转化为基本流：
        stream.mapToInt();
        stream.mapToDouble();
        stream.mapToLong();
        2、Stream流的两个特性：
       （1）一次性使用，即流只能使用一次
       （2）两类操作
            中间操作：返回流本身，可以进行链式操作
            终结操作：返回非流，不能进行链式操作
     */
    public static void main(String[] args) {

        Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        // filter和map都是中间操作（lazy 懒操作，不会立即执行），返回流本身，可以进行链式操作
        // forEach是终结操作（eager 立即操作），不返回流，不能进行链式操作
        // 在一次流的操作中，中间操作可以出现多次，但是终结操作只能出现一次
        integerStream.filter(item -> item % 2 == 0).map(item -> item * 2).forEach(System.out::println);

    }
}
